package service

import (
	"context"
	"monoblog/common"
	"monoblog/common/register"
	"monoblog/domain/dto"
	"monoblog/domain/model"
)

func GetArticleService() ArticleService {
	return register.GetInstance[ArticleService]("ArticleService")
}

type ArticleService interface {
	// Add 添加文章
	Add(ctx context.Context, form dto.ArticleReqForm) (string, error)

	// UpdateByID 更新文章
	UpdateByID(ctx context.Context, id string, form dto.ArticleReqForm) error

	// DeleteByID 删除文章
	DeleteByID(ctx context.Context, id string) error

	// Publish 发布文章
	Publish(ctx context.Context, id string, form dto.ArticleReqPublishForm) error

	// FindByID 根据ID查询文章详情
	FindByID(ctx context.Context, id string) (*model.Article, error)

	FindInBlogIds(ctx context.Context, ids []string) ([]*model.Article, error)

	// FindListPage 分页查询文章列表
	FindListPage(ctx context.Context, query dto.ArticleQuery) ([]*model.Article, error)

	// FindListByUser 用户的文章列表(全部状态的)
	FindListByUser(ctx context.Context, userId string, query common.BaseQuery) ([]*model.Article, error)

	// BlogsByUser 用户的文章列表(已经发布的)
	BlogsByUser(ctx context.Context, userId string, query common.BaseQuery) ([]*model.Article, error)

	// BlogsByCategory 分类下的文章列表(已经发布的)
	BlogsByCategory(ctx context.Context, cateId string, query common.BaseQuery) ([]*model.Article, error)

	// BlogsBySection 专栏下的文章列表(已经发布的)
	BlogsBySection(ctx context.Context, sectionId string, query common.BaseQuery) ([]*model.Article, error)

	// PopularBlogs 首页推荐文章列表
	PopularBlogs(ctx context.Context, query common.BaseQuery) ([]*model.Article, error)
	// InterestedBlogs 你可能感兴趣的文章
	InterestedBlogs(ctx context.Context, userId string) ([]*model.Article, error)

	// ReadById 阅读文章
	ReadById(ctx context.Context, id string, preview bool) (*model.Article, error)

	// PushDataToSearch 手动推送文章数据到SearchDB
	PushDataToSearch(ctx context.Context, blogIds []string) ([]string, error)
}
